summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorliamwhite <liamwhite@users.noreply.github.com>2023-02-11 18:35:16 +0100
committerGitHub <noreply@github.com>2023-02-11 18:35:16 +0100
commitc97b5c9ff9e3aec10bf0cab2ff954de3f61cec79 (patch)
tree9cdc8b3a593fa575c98e8f1fcf6096ae018a2167
parentMerge pull request #9773 from bunnei/fix-process-resource (diff)
parentvideo_core: Speed up video frame data copy (diff)
downloadyuzu-c97b5c9ff9e3aec10bf0cab2ff954de3f61cec79.tar
yuzu-c97b5c9ff9e3aec10bf0cab2ff954de3f61cec79.tar.gz
yuzu-c97b5c9ff9e3aec10bf0cab2ff954de3f61cec79.tar.bz2
yuzu-c97b5c9ff9e3aec10bf0cab2ff954de3f61cec79.tar.lz
yuzu-c97b5c9ff9e3aec10bf0cab2ff954de3f61cec79.tar.xz
yuzu-c97b5c9ff9e3aec10bf0cab2ff954de3f61cec79.tar.zst
yuzu-c97b5c9ff9e3aec10bf0cab2ff954de3f61cec79.zip
-rw-r--r--src/video_core/host1x/vic.cpp14
1 files changed, 5 insertions, 9 deletions
diff --git a/src/video_core/host1x/vic.cpp b/src/video_core/host1x/vic.cpp
index 36a04e4e0..10d7ef884 100644
--- a/src/video_core/host1x/vic.cpp
+++ b/src/video_core/host1x/vic.cpp
@@ -189,9 +189,7 @@ void Vic::WriteYUVFrame(const AVFrame* frame, const VicConfig& config) {
for (std::size_t y = 0; y < frame_height; ++y) {
const std::size_t src = y * stride;
const std::size_t dst = y * aligned_width;
- for (std::size_t x = 0; x < frame_width; ++x) {
- luma_buffer[dst + x] = luma_src[src + x];
- }
+ std::memcpy(luma_buffer.data() + dst, luma_src + src, frame_width);
}
host1x.MemoryManager().WriteBlock(output_surface_luma_address, luma_buffer.data(),
luma_buffer.size());
@@ -205,15 +203,15 @@ void Vic::WriteYUVFrame(const AVFrame* frame, const VicConfig& config) {
// Frame from FFmpeg software
// Populate chroma buffer from both channels with interleaving.
const std::size_t half_width = frame_width / 2;
+ u8* chroma_buffer_data = chroma_buffer.data();
const u8* chroma_b_src = frame->data[1];
const u8* chroma_r_src = frame->data[2];
for (std::size_t y = 0; y < half_height; ++y) {
const std::size_t src = y * half_stride;
const std::size_t dst = y * aligned_width;
-
for (std::size_t x = 0; x < half_width; ++x) {
- chroma_buffer[dst + x * 2] = chroma_b_src[src + x];
- chroma_buffer[dst + x * 2 + 1] = chroma_r_src[src + x];
+ chroma_buffer_data[dst + x * 2] = chroma_b_src[src + x];
+ chroma_buffer_data[dst + x * 2 + 1] = chroma_r_src[src + x];
}
}
break;
@@ -225,9 +223,7 @@ void Vic::WriteYUVFrame(const AVFrame* frame, const VicConfig& config) {
for (std::size_t y = 0; y < half_height; ++y) {
const std::size_t src = y * stride;
const std::size_t dst = y * aligned_width;
- for (std::size_t x = 0; x < frame_width; ++x) {
- chroma_buffer[dst + x] = chroma_src[src + x];
- }
+ std::memcpy(chroma_buffer.data() + dst, chroma_src + src, frame_width);
}
break;
}